package pe.gob.osce.sirenas.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import pe.gob.osce.sirenas.dao.DistritoDAOLocal;
import pe.gob.osce.sirenas.dao.convert.DistritoConvert;
import pe.gob.osce.sirenas.model.AcreditacionDTO;
import pe.gob.osce.sirenas.model.DistritoDTO;
import pe.gob.osce.sirenas.model.jpa.Distrito;
import pe.gob.osce.sirenas.util.ConstanteEJB;
import pe.gob.osce.sirenas.util.ModeloException;



@Stateless
public class DistritoDAOImpl implements DistritoDAOLocal {

	@PersistenceContext(unitName="pe.gob.osce.sirenas.be.pu" )
	private	EntityManager	em;

	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteEJB.PROPERTIES);
	@Override 
	public List<DistritoDTO>  ListarDistrito()
			throws Exception {

		List<DistritoDTO> listDistritoDTO=null;
		List<Distrito> listaDistritoJPA=null;
		try{
			StringBuilder  	jpql= new StringBuilder();
			jpql.append("SELECT dist FROM Distrito dist");
		
			Query	query= em.createQuery( jpql.toString() );
			List<Distrito>	listaObjeto= query.getResultList();
			if(!listaObjeto.isEmpty()) {
				listaDistritoJPA=new ArrayList<Distrito>();
				for (Distrito obj: listaObjeto) {
					listaDistritoJPA.add(obj);
				}
				listDistritoDTO=DistritoConvert.createListDTO(listaDistritoJPA);
			}

		} catch (NoResultException nre) {
			listDistritoDTO=null;
			 throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_DATA));
		}catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB), e);
		}
		return listDistritoDTO;
	}
	

	@Override 
	public List<DistritoDTO>  ListarDistrito(Long idProvincia,Long idRegion)
			throws Exception {

		List<DistritoDTO> listDistritoDTO=null;
		List<Distrito> listaDistritoJPA=null;
		try{
			StringBuilder  	jpql= new StringBuilder();
			jpql.append("SELECT dist FROM Distrito dist WHERE dist.idProvincia= :idProvincia AND dist.idRegion= :idRegion");
		
			Query	query= em.createQuery( jpql.toString() );
			query.setParameter("idProvincia", idProvincia);
			query.setParameter("idRegion", idRegion);
			List<Distrito>	listaObjeto= query.getResultList();
			if(!listaObjeto.isEmpty()) {
				listaDistritoJPA=new ArrayList<Distrito>();
				for (Distrito obj: listaObjeto) {
					listaDistritoJPA.add(obj);
				}
				listDistritoDTO=DistritoConvert.createListDTO(listaDistritoJPA);
			}

		} catch (NoResultException nre) {
			listDistritoDTO=null;
			 throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_DATA));
		}catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB), e);
		}
		return listDistritoDTO;
	}
}
